using Assets.Scripts.GDK;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;

namespace Brick
{
	/// <summary>
	/// 游戏通关面板类，处理关卡完成后的界面逻辑
	/// </summary>
	public class GamePassPanel : gdk_base_panel
	{
		// 关卡文本显示
		public Text levelText;

		// 星级评分图片数组
		public Image[] starImgs;

		// 防止效果重复触发的标志
		private bool onceEffect;

		/// <summary>
		/// 面板加载时调用
		/// </summary>
		public override void OnLoad()
		{
			// 初始隐藏所有星星
			starImgs[0].gameObject.SetActive(value: false);
			starImgs[1].gameObject.SetActive(value: false);
			starImgs[2].gameObject.SetActive(value: false);
		}

		/// <summary>
		/// 面板启动时调用
		/// </summary>
		public override void OnStart()
		{
			levelText.text = "关卡:" + GameData.selectIndex;//"Level:" + GameData.selectIndex; //改成中文 --shicy
			onceEffect = false;
			OnNextLevel();
			
			// 检查是否首次通关
			bool flag = true;
			// 获取当前星级评分
			int intStarLevel = GDK.ModuleManger.Module<ScoreBoxModule>().getIntStarLevel();
			// 获取历史最高星级
			int levelStars = GDK.ModuleManger.Module<LevelSceneModule>().GetLevelStars(GameData.selectIndex);
			if (levelStars > 0)
			{
				flag = false;
			}
			
			// 如果当前星级高于历史记录，更新星级并增加总星星数
			if (intStarLevel > levelStars)
			{
				GDK.ModuleManger.Module<LevelSceneModule>().OnLevelStar(GameData.selectIndex, intStarLevel);
				GameManager.addStar(intStarLevel - levelStars);
			}
			
			// 重置星星显示
			starImgs[0].gameObject.SetActive(value: false);
			starImgs[1].gameObject.SetActive(value: false);
			starImgs[2].gameObject.SetActive(value: false);
			
			// 逐个显示星星并添加动画效果
			for (int i = 0; i < intStarLevel; i++)
			{
				Image cur = starImgs[i];
				gdk_runTime.setTimeOut(delegate
				{
					cur.gameObject.transform.localScale = new Vector3(0f, 0f, 0f);
					cur.gameObject.SetActive(value: true);
					cur.gameObject.transform.DOScale(0.5f, 0.1f).SetEase(Ease.Unset).OnComplete(delegate
					{
					});
				}, 0.2f * (float)i, cur.gameObject);
			}
			
			// 发送通关事件
			GDK.ModuleManger.Module<LevelInfoBoxModule>().sendPassCustomEvent();
			if (flag)
			{
				// 发送首次通关事件
				GDK.ModuleManger.Module<LevelInfoBoxModule>().sendFirstPassCustomEvent();
			}
			//if (!GameData.buyNewerGift && !GameData.newerOut && GameData.selectIndex == GameManager.getNewerLv())
			//{
			//	gdk_runTime.setTimeOut(delegate
			//	{
			//		GameData.newerOut = true;
			//		GDK.ModuleManger.Module<ShopPanelModule>().SetPage(1);
			//		gdk_game_manager.showPanel(PanelID.DIAMONDSHOP);
			//	}, 1f);
			//}
		}

		/// <summary>
		/// 返回大厅按钮点击处理
		/// </summary>
		public void OnLobbyClick()
		{
			gdk_game_manager.PlaySound(AudioID.click);
			string adType = GameManager.getAdType();		
			gdk_game_manager.blackScene();
			close();			
		}

		/// <summary>
		/// 更新下一关卡的解锁状态
		/// </summary>
		public void OnNextLevel()
		{
			// 如果当前选择的关卡是已解锁的最高关卡，并且未达到最大关卡数，则解锁下一关
			if (GameData.selectIndex == GameData.index && GameData.index < GameManager.getMaxLevelNum())
			{
				GameData.index++;
			}
		}

		/// <summary>
		/// 选择下一关卡
		/// </summary>
		public void OnNextSelect()
		{
			// 如果当前选择的关卡未达到已解锁的最高关卡，则选择下一关
			if (GameData.selectIndex < GameData.index)
			{
				GameData.selectIndex++;
			}
		}

		/// <summary>
		/// 继续游戏按钮点击处理
		/// </summary>
		public void OnContinueClick()
		{
			if (!onceEffect)
			{
				onceEffect = true;
				gdk_game_manager.PlaySound(AudioID.click);
				
				// 检查是否达到最大关卡数
				if (GameData.selectIndex == GameManager.getMaxLevelNum())
				{
					gdk_game_manager.message("Please wait for game update");
					return;
				}
				string adType = GameManager.getAdType();
				
				OnNextSelect();
				GDK.ModuleManger.Module<LevelInfoBoxModule>().sendCustomEvent();
				gdk_game_manager.showPanel(PanelID.YULAN);
				close();
			}
		}

		/// <summary>
		/// 重新开始按钮点击处理
		/// </summary>
		public void OnRestartClick()
		{
			gdk_game_manager.PlaySound(AudioID.click);
			string adType = GameManager.getAdType();
			
			// 播放广告，成功后重新开始游戏，失败后返回
			GDK.ModuleManger.Module<AdvansBoxMoudle>().PlayAD(Advans.XPGGREPLAY, adType, delegate
			{
				GDK.ModuleManger.Module<LevelInfoBoxModule>().sendFailCustomEvent();
				gdk_game_manager.DispachEvent(EventID.HIDE_PLAY_DANGER);
				gdk_game_manager.showPanel(PanelID.YULAN);
				close();
			}, delegate
			{
				gdk_game_manager.blackScene();
				close();
			});
			
		}
	}
}

